package main

import "fmt"

// 包内部变量，这个声明的时候必须用var，不能使用 :=
var a1 = 33
var s1 = "s1"

// 用括号可以简写
var (
	a2 = 44
	s2 = "s2"
)

// 定义变量，不赋值会有默认值的
func variableZeroValue() {
	var a int    // 默认 0
	var s string // 默认空
	fmt.Printf("%d %q\n", a, s)
}

// 定义变量，赋值
func variableInitialValue() {
	var a, b int = 100, 123
	var s string = "abc"
	fmt.Printf("%d %d %q\n", a, b, s)
}

// 定义变量，赋值，类型自动推导
func variableTypeDeduction() {
	// 自动推导类型的时候不要写 类型关键字
	var a, b, c, d = 100, 123, true, "def"
	fmt.Println(a, b, c, d)
}

// 语法糖 省略 var 关键字的写法
func variableShorter() {
	a, b, c, d := 100, 123, true, "def"
	fmt.Println(a, b, c, d)
}

func main() {
	fmt.Println("Hello World!")
	variableZeroValue()
	variableInitialValue()
	variableTypeDeduction()
	variableShorter()
	fmt.Println(a1, s1)
	fmt.Println(a2, s2)
}
